package webing.dao;

import java.sql.*;
import java.util.*;


import webing.excepcion.DAOExcepcion;


import webing.modelo.sede;
import webing.util.ConexionBD;

public class sedeDAO extends baseDAO{
	
	public void insertar(sede vo) throws DAOExcepcion {
		System.out.println("sedeDAO: insertar (sede)");
		String query = "INSERT INTO sede(nombresede, direccion, telefono) VALUES (?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, vo.getNombresede());
			stmt.setString(2, vo.getDireccion());
			stmt.setInt(3, vo.getTelefono());
		
			
				int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	
	}
	
	public void actualizarSede(sede vo) throws DAOExcepcion {

		System.out.println("sede: actualizar(sede)");
		String query = "update sede set direccion=?, telefono=? where nombresede=?"; 	
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			
			stmt.setString(1, vo.getDireccion());
			stmt.setInt(2, vo.getTelefono());
			stmt.setString(3, vo.getNombresede());
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}
	
	public Collection<sede> listar() throws DAOExcepcion {
		System.out.println("sedeDAO: listar()");
		Collection<sede> c = new ArrayList<sede>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = "SELECT nombresede, telefono, direccion from sede";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				sede vo = new sede();
				
				vo.setNombresede(rs.getString("nombresede"));
				vo.setTelefono(rs.getInt("telefono"));
				vo.setDireccion(rs.getString("direccion"));
		
				
				c.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
	}
	
    public Collection<sede> buscarPorNombresede(String nombre) throws DAOExcepcion {
	System.out.println("compania_de_seguroDAO: buscarPorsede(String nombre)");
	String query = "SELECT nombresede, direccion, telefono FROM sede WHERE nombresede like ?";
	Collection<sede> lista = new ArrayList<sede>();
	Connection con = null;
	PreparedStatement stmt = null;
	ResultSet rs = null;
	try {
		con = ConexionBD.obtenerConexion();
		stmt = con.prepareStatement(query);
		stmt.setString(1, "%" +nombre+ "%");    
		rs = stmt.executeQuery();
		while (rs.next()) {
			sede vo = new sede(); 
			vo.setNombresede(rs.getString("nombresede"));
			vo.setTelefono(rs.getInt("telefono"));
			vo.setDireccion(rs.getString("direccion"));
	
			lista.add(vo);
		}
	} catch (SQLException e) {
		System.err.println(e.getMessage());
		throw new DAOExcepcion(e.getMessage());
	} finally {
		this.cerrarResultSet(rs);
		this.cerrarStatement(stmt);
		this.cerrarConexion(con);
	}
	return lista;
}
    
    public Collection<sede> buscarNombreSede(String nombre) throws DAOExcepcion { 
    	System.out.println("sedeDAO: buscarNombreSede(String nombre)"); 
    	String query = "SELECT nombresede, direccion, telefono FROM sede WHERE nombresede like ?";
    	
    	Collection<sede> lista = new ArrayList<sede>();
    	Connection con = null;
    	PreparedStatement stmt = null;
    	ResultSet rs = null;
    	try {
    		con = ConexionBD.obtenerConexion();
    		stmt = con.prepareStatement(query);
    		stmt.setString(1, "%" + nombre + "%"); 
    		rs = stmt.executeQuery();
    		while (rs.next()) {
    			sede vo = new sede();
    			vo.setNombresede(rs.getString("nombresede"));
    			vo.setTelefono(rs.getInt("telefono"));
    			vo.setDireccion(rs.getString("direccion"));
    			lista.add(vo);
    		}
    	} catch (SQLException e) {
    		System.err.println(e.getMessage());
    		throw new DAOExcepcion(e.getMessage());
    	} finally {
    		this.cerrarResultSet(rs);
    		this.cerrarStatement(stmt);
    		this.cerrarConexion(con);
    	}
    	return lista;
        } 

    public void eliminar(String nombresede) throws DAOExcepcion {
		  System.out.println("sedeDAO: eliminar(String nombresede)");
		  String query = "DELETE FROM sede WHERE nombresede = ?";
		  Connection con = null;
		  PreparedStatement stmt = null;
		  try {
			  		con = ConexionBD.obtenerConexion();
		            stmt = con.prepareStatement(query);
		            stmt.setString(1, nombresede);
		            int i = stmt.executeUpdate();
		            if (i != 1) {
		                    throw new SQLException("No se pudo eliminar");
		            }
		    } catch (SQLException e) {
		            System.err.println(e.getMessage());
		            throw new DAOExcepcion(e.getMessage());
		    } finally {
		            this.cerrarStatement(stmt);
		            this.cerrarConexion(con);
		    }
		}
    
}



